﻿using System.Collections.Generic;
using System.Reflection;
using Comandos.Implementacion.ComandosSiniestro;
using Comandos.Interfaces;
using ObjetosComunes.Entidades;
using ObjetosComunes.Logger;
using ObjetosComunes.Recursos;

namespace Comandos.Fabricas
{
    /// <summary> Clase que hace de fabrica para los comandos que involucra la entidad Siniestro </summary>
    public class FabricaComandosSiniestro
    {
        /// <summary> Metodo que construye el comando agregar </summary>
        /// <param name="siniestro">Datos de la Siniestro a insertar</param>
        /// <returns>Comando que agrega una Siniestro</returns>
        public static IComando<int> ObtenerComandoAgregar(Siniestro siniestro)
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new Agregar(siniestro);
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que construye el comando consultar </summary>
        /// <param name="siniestro">Datos de la Siniestro a consultar</param>
        /// <returns>Comando que consulta una Siniestro</returns>
        public static IComando<List<Siniestro>> ObtenerComandoConsultar(Siniestro siniestro)
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new Consultar(siniestro);
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que construye el comando editar </summary>
        /// <param name="siniestro">Datos de la Siniestro a editar</param>
        /// <returns>Comando que edita los datos de una Siniestro</returns>
        public static IComando<bool> ObtenerComandoEditar(Siniestro siniestro)
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new Editar(siniestro);
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }
    }
}
